import type { InjectionKey } from 'vue'
import { createStore, useStore as baseUseStore, Store } from 'vuex'

import userModule from './modules/user/user'
import categoryModule from './modules/category'

import type { IRootState } from './types'

// Vue 提供的 InjectionKey 接口
// 该接口扩展了 Symbol 的泛型类型。它可用于在生产者和消费者之间同步 inject 值的类型
export const key: InjectionKey<Store<IRootState>> = Symbol('store')

export const store = createStore<IRootState>({
  modules: {
    user: userModule,
    category: categoryModule
  }
})

// 定义自己的 `useStore` 组合式函数
export function useStore() {
  return baseUseStore(key)
}
